import Vue from 'vue'
import ViewUI from 'view-design'
import VueI18n from 'vue-i18n';
import Languages from '@/i18n/locale';
// 插件
import util from '@/libs/util';
import { includeArray } from '@/libs/system';

import VueDND from 'awe-dnd' //拖拽排序
// import iViewPro from '@/libs/iViewPro/iview-pro.min.js';
// import  '@/libs/iViewPro/iview-pro.css';
import iViewPro from '../iview-pro/src/index.js';
import '@/libs/iview-pro/iview-pro.css';
import '@/styles/index.less';
// 内置组件
import iLink from '@/components/link';
Vue.component("iLink", iLink)
//注入mock
require("../mock")
export default ({
  app,
  store
}) => {
  Vue.use(VueI18n)
  Vue.use(VueDND)
  app.i18n = new VueI18n({
    locale: 'zh-CN',
    messages: Languages
  });
  app.i18n.locale = "zh-CN"
  Vue.use(ViewUI, {
    // locale:'zh-CN',
    i18n: (key, value) => app.i18n.t(key, value)
  })
  Vue.use(iViewPro);

  Vue.prototype.$log = {
    ...util.log,
    push(data) {
      if (typeof data === 'string') {
        // 如果传递来的数据是字符串
        // 赋值给 message 字段
        // 为了方便使用
        // eg: this.$log.push('foo text')
        store.dispatch('admin/log/push', {
          message: data
        });
      } else if (typeof data === 'object') {
        // 如果传递来的数据是对象
        store.dispatch('admin/log/push', data);
      }
    }
  }

  Vue.config.errorHandler = function (error, instance, info) {
    Vue.nextTick(() => {
      // store 追加 log
      store.dispatch('admin/log/push', {
        message: `${info}: ${error.message}`,
        type: 'error',
        meta: {
          error
          // instance
        }
      });
      // 只在开发模式下打印 log
      if (process.env.NODE_ENV === 'development') {
        util.log.capsule('iView Admin', 'ErrorHandler', 'error');
        util.log.error('>>>>>> 错误信息 >>>>>>');
        console.log(info);
        util.log.error('>>>>>> Vue 实例 >>>>>>');
        console.log(instance);
        util.log.error('>>>>>> Error >>>>>>');
        console.log(error)
      }
    })
  }

  Vue.directive('auth',{
    inserted (el, binding, vnode) {
      const { value } = binding;
      const access = store.state.admin.user.info.access;
  
      if (value && value instanceof Array && value.length && access && access.length) {
          const isPermission = includeArray(value, access);
          if (!isPermission) {
              el.parentNode && el.parentNode.removeChild(el);
          }
      }
  }
  } )
  // Vue.directive('paste', {
  //   bind(el, binding, vnode) {
  //     el.addEventListener('paste', function (event) { //这里直接监听元素的粘贴事件
  //       binding.value(event)
  //     })
  //   }
  // })
  // console.warn("this:",app.i18n.locale,app)
}